package com.study.spmongodb.threadlocal;

/**
 * @author MI
 * @version 1.0
 * @date 2020/10/26 16:28
 */
public class Demo01 {
    /**
     * 对于 ThresholdLocal的原理，可以简单地理解为内部用了一个 Map，key是线程对象，value是值（注意，实际不是这样实现的
     */
    public static void main(String[] args) {
        showLogId();

        logId.set(10);
        showLogId();

        logId.set(20);
        showLogId();

        logId.remove();
        showLogId();
    }

    //初始值是 null
    private static ThreadLocal<Integer> logIds = new ThreadLocal<>();
    private static ThreadLocal<Integer> logId = ThreadLocal.withInitial(() -> {
        // 这里只是一个示例，实际业务场景中可能是从数据源（如MySQL）中取数据
        return 1;
    });

    // 输出线程名、logId在当前线程的值
    public static void showLogId() {
        System.out.printf("%s : %s\n", Thread.currentThread().getName(), logId.get());
    }
}
